Timeout এবং Exception Handling এর জন্য RestTemplate কনফিগারেশন

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) - RestTemplate এর কনফিগারেশন
193

স্প্রিং বুটে RestTemplate কনফিগার করার সময় টাইমআউট এবং এক্সসেপশন হ্যান্ডলিং যুক্ত করার জন্য কাস্টম কনফিগারেশন প্রয়োজন। নিচে এই কনফিগারেশন এবং হ্যান্ডলিংয়ের উদাহরণ তুলে ধরা হলো:

RestTemplate-এর জন্য টাইমআউট কনফিগার করার সময় HttpComponentsClientHttpRequestFactory ব্যবহার করা হয়। এটি কানেকশন টাইমআউট এবং রিড টাইমআউট সেট করার জন্য ব্যবহৃত হয়।

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

import java.time.Duration;

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();

        // Set connection timeout (milliseconds)
        factory.setConnectTimeout(5000);

        // Set read timeout (milliseconds)
        factory.setReadTimeout(5000);

        return new RestTemplate(factory);
    }
}

টাইমআউটের জন্য পুলিং সংযোগ ব্যবহারের উদাহরণ

পুলিং কানেকশন ব্যবহারের মাধ্যমে টাইমআউট এবং কার্যকারিতা উন্নত করা যায়:

@Bean
public RestTemplate restTemplateWithPooling() {
    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
    connectionManager.setMaxTotal(100); // সর্বোচ্চ ১০০ কানেকশন
    connectionManager.setDefaultMaxPerRoute(20); // প্রতি রাউটে সর্বোচ্চ ২০ কানেকশন

    CloseableHttpClient httpClient = HttpClients.custom()
            .setConnectionManager(connectionManager)
            .build();

    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
    factory.setConnectTimeout(5000); // কানেকশন টাইমআউট
    factory.setReadTimeout(5000);    // রিড টাইমআউট

    return new RestTemplate(factory);
}

Exception Handling

REST API কল করার সময় ত্রুটি হ্যান্ডল করার জন্য RestTemplate-এ কাস্টম ResponseErrorHandler ব্যবহার করা যায়। এটি ত্রুটিপূর্ণ HTTP রেসপন্স হ্যান্ডল করতে ব্যবহৃত হয়।

উদাহরণ:

import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import java.io.IOException;

public class CustomResponseErrorHandler extends DefaultResponseErrorHandler {

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        // Custom error handling logic
        if (response.getStatusCode().is4xxClientError()) {
            throw new RestClientException("Client Error: " + response.getStatusCode());
        } else if (response.getStatusCode().is5xxServerError()) {
            throw new RestClientException("Server Error: " + response.getStatusCode());
        } else {
            super.handleError(response);
        }
    }
}

এই কাস্টম হ্যান্ডলার RestTemplate-এ যুক্ত করুন:

@Bean
public RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setErrorHandler(new CustomResponseErrorHandler());
    return restTemplate;
}

Exception Handling Controller Advice

আপনার অ্যাপ্লিকেশনের সব REST কলের জন্য @ControllerAdvice ব্যবহার করে গ্লোবাল এক্সসেপশন হ্যান্ডল করতে পারেন:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(RestClientException.class)
    public ResponseEntity<String> handleRestClientException(RestClientException ex) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Error: " + ex.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGeneralException(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred: " + ex.getMessage());
    }
}

পূর্ণ উদাহরণ

কাস্টম টাইমআউট এবং এক্সসেপশন হ্যান্ডলিংসহ RestTemplate কনফিগার:

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(5000); // কানেকশন টাইমআউট
        factory.setReadTimeout(5000);    // রিড টাইমআউট

        RestTemplate restTemplate = new RestTemplate(factory);
        restTemplate.setErrorHandler(new CustomResponseErrorHandler());
        return restTemplate;
    }
}

এইভাবে আপনি RestTemplate-এর জন্য টাইমআউট এবং এক্সসেপশন হ্যান্ডলিং কনফিগার করতে পারবেন। এটি আপনার ক্লায়েন্ট অ্যাপ্লিকেশনকে আরও স্থিতিশীল এবং রিলায়েবল করবে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...